package com.network.service.networkmodel;

import org.springframework.stereotype.Component;

import com.complexnet.graph.bagraph;
/**
 * 
 * @author lingxiaowei
 *
 */
@Component
public class BAGraphService extends GraphService implements IBAGraphService{
	
	private bagraph mGraph;
	

	public BAGraphService()
	{
		super();
		mGraph = new bagraph();
	}
	
	/**
	 * 根据参数生成BA网络
	 * @param nodes 规模
	 * @param nodeOutDeg 连边数
	 * @return 网络生成成功则返回true，否则返回false
	 */
	public boolean genBAGraph(int nodes, int nodeOutDeg)
	{
		if(SUCCESS == mGraph.genbagraph(nodes, nodeOutDeg, DEFAULT_BA_MINAVDGREE, true))
		{
			isGenGraph = true;
			return true;
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 获取BA网络的平均度
	 * @return 函数调用成功返回网络平均度，调用失败则返回DOUBLE_DATE_ERROR
	 */
	@Override
	public double getAveDegree()
	{
		if(isGenGraph)
		{
			return mGraph.getAvedegree();
		}
		else
		{
			return DOUBLE_DATE_ERROR;
		}
	}
	
	/**
	 * 获取BA网络的平均聚类系数
	 * @return 函数调用成功返回网络平均聚类系数，调用失败则返回DOUBLE_DATE_ERROR
	 */
	@Override
	public double getAveCC()
	{
		if(isGenGraph)
		{
			return mGraph.getAveCC();
		}
		else
		{
			return DOUBLE_DATE_ERROR;
		}
	}
	
	/**
	 * 获取BA网络的平均距离
	 * @return 函数调用成功返回网络平均距离，调用失败则返回DOUBLE_DATE_ERROR
	 */
	@Override
	public double getAveLen()
	{
		if(isGenGraph)
		{
			return mGraph.getAveLen();
		}
		else
		{
			return DOUBLE_DATE_ERROR;
		}		
	}
	
	/**
	 * 获取BA网络的网络直径
	 * @return 函数调用成功返回网络直径，调用失败则返回DOUBLE_DATE_ERROR
	 */
	@Override
	public double getDiameter()
	{
		if(isGenGraph)
		{
			return mGraph.getDiameter();
		}
		else
		{
			return DOUBLE_DATE_ERROR;
		}	
	}
	
	
	/**
	 * 获取BA网络的模块度
	 * @return 函数调用成功返回网络模块杜，调用失败则返回DOUBLE_DATE_ERROR
	 */
	@Override
	public double getModularity()
	{
		if(isGenGraph)
		{
			return mGraph.getModularity();
		}
		else
		{
			return DOUBLE_DATE_ERROR;
		}	
	}

}
